package main

import (
	"client/proto/hello"
	"context"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"strconv"
)

func main() {
	// ----发现服务----
	// 1、consul的web页面配置
	consulWebConfig := api.DefaultConfig()
	//consulConfig.Address = "127.0.0.1:8500" //consul web服务启动的地址。默认为127.0.0.1:8500

	// 2、创建consul的web服务对象实例
	consulWebClient, _ := api.NewClient(consulWebConfig)

	// 3、传入参数，服务名：HelloService、tag：test。获取对应服务的IP和端口
	serviceEntry, _, _ := consulWebClient.Health().Service("HelloService", "test", false, nil)
	fmt.Printf("地址：%v\n", serviceEntry[0].Service.Address)
	fmt.Printf("端口：%v\n", serviceEntry[0].Service.Port)

	// 4、拼接IP和端口

	//------客户端调用远程rpc服务，基本原来一样（仅仅将grpc.Dial第一参数替换为，consul返回的服务真实地址）-------
	rpcAddress := serviceEntry[0].Service.Address + ":" + strconv.Itoa(serviceEntry[0].Service.Port)
	//grpc.WithTransportCredentials ：配置连接级别的安全凭证（例如，TLS/SSL），返回一个 DialOption，用于连接服务器
	//credentials.NewClientTLSFromFile ：使用输入的证书文件作为客户端构造TLS凭证
	//insecure.NewCredentials：返回禁用传输安全性的TLS凭证
	grpcClient, err := grpc.Dial(rpcAddress, grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		fmt.Printf("err-->%v", err)
		return
	}
	client := hello.NewHelloClient(grpcClient)
	res, err := client.SayHello(context.Background(), &hello.HelloReq{
		Name: "hedaodao",
	})
	if err != nil {
		fmt.Printf("err-->%v", err)
		return
	}
	fmt.Printf("%#v\n", res)
}
